﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using System.Text;
using CinePlancito.Dominio;

namespace CinePlancito.Controllers
{
    public class CinePlancitoController : Controller
    {
        string RestReserva = "http://localhost:15497/Reservas.svc/Reservas";
        JavaScriptSerializer js = new JavaScriptSerializer();
        
        ClientesWS.ClientesClient proxyCliente = new ClientesWS.ClientesClient();
        CarteleraWS.CartelerasClient proxyCartelera = new CarteleraWS.CartelerasClient();

        public ActionResult Index()
        {
            return View(proxyCartelera.ListarCartelera());
            
        }

        public ActionResult MenuPrincipal()
        {
            return View();
        }

        [HttpPost]
        public ActionResult IraMenu()
        {
            return View("MenuPrincipal");
        }

        private ICollection<SelectListItem> ListadoOcupacion(int ocupacion) 
        { ICollection<SelectListItem> Ocupacion = new List<SelectListItem>();
        Ocupacion.Add(new SelectListItem()
        {
            Value = "0",
            Text = "Seleccione Ocupacion",
            Selected = (0== ocupacion)
        });
            foreach (ClientesWS.Ocupacion obj in proxyCliente.ListarOcupacion())
                Ocupacion.Add(new SelectListItem() {
                    Value = obj.Codigo.ToString(),
                    Text = obj.Nombre,
                    Selected = (obj.Codigo == ocupacion)
                });
            return Ocupacion; 
        }
        

        public ActionResult RegistrarCliente()
        {
            int ocupacion = 0;
            TempData["Ocupacion"] = ListadoOcupacion(ocupacion);
            return View();
        }

        [HttpPost]
        public ActionResult RegistrarCliente(FormCollection collection)
        {
            try
            {

                int nCodigo2 = int.Parse(((string)collection["Codigo"] == string.Empty ? "0" : (string)collection["Codigo"]));
                if (collection["Correo"].Trim().Length == 0) ModelState.AddModelError("Correo", "Debe Ingresar un Correo");
                if (collection["Nombres"].Trim().Length == 0) ModelState.AddModelError("Nombres", "Debe Ingresar Nombre");
                if (collection["Pass"].Trim().Length == 0) ModelState.AddModelError("Pass", "Debe Ingresar Cotraseña");
                if (collection["Telefono"].Trim().Length == 0) ModelState.AddModelError("Telefono", "Debe Ingresar Telefono");
                if (collection["Fecha_nac"].Trim().Length == 0) ModelState.AddModelError("Fecha_nac", "Debe Ingresar Fecha de Nacimiento");

                if (collection["Pass"].Trim() == collection["Rpass"].Trim())
                { }
                else
                {  ModelState.AddModelError("Rpass", "La contraseña debe Coincidir");}


                ClientesWS.Cliente ClienteEncontrado;
                ClienteEncontrado = proxyCliente.ObtenerCliente((string)collection["Correo"]);
 
                if (ClienteEncontrado.Correo==collection["Correo"].Trim()) ModelState.AddModelError("Correo", "El Correo,Ya existe");


                if (!ModelState.IsValid)
                {

                   ClientesWS.Cliente modelCliente = new ClientesWS.Cliente();
                  
                   modelCliente.Correo = (string)collection["Correo"];
                   modelCliente.Nombres = (string)collection["Nombres"];
                   modelCliente.Telefono = (string)collection["Telefono"];
                   modelCliente.Fecha_nac = (string)collection["Fecha_nac"];

                  TempData["Ocupacion"] = ListadoOcupacion(nCodigo2);
                  return View(modelCliente);

                }




                //ncodigo es la ocupacion que otenemos del lsitado
                int nCodigo = int.Parse(((string)collection["Codigo"] == string.Empty ? "0" : (string)collection["Codigo"]));
                string nombre = (string)collection["Nombres"];
                string apellidos = (string)collection["Apellidos"];
                string correo = (string)collection["Correo"];
                string pass = (string)collection["Pass"];
                string rpass = (string)collection["Rpass"];
                string telefono = (string)collection["Telefono"];
                string direccion = (string)collection["Direccion"];
                string dni = (string)collection["Dni"];
                string fecha_nac = (string)collection["Fecha_nac"];
                proxyCliente.CrearCliente(nombre, apellidos, correo, nCodigo, pass, rpass, telefono, direccion, dni, fecha_nac);
                return RedirectToAction("Index");





            }
            catch
            {
                return View();
            }
        }

        public ActionResult ListaClientes()
        {
            return View(proxyCliente.ListarClientes());
        }

        public ActionResult EditarCliente(string correo)
        {
            ClientesWS.Cliente ClienteEncontrado;
            ClienteEncontrado = proxyCliente.ObtenerCliente(correo);
            TempData["Ocupacion"] = ListadoOcupacion(ClienteEncontrado.Ocupacion.Codigo);
            return View(ClienteEncontrado);

            //ClientesWS.Cliente cliente = proxyCliente.ObtenerCliente(correo);

        }

        // POST: /Sede/Edit/5
        [HttpPost]
        public ActionResult EditarCliente(string correo, FormCollection collection)
        {
            try
            {


                //ncodigo es la ocupacion que otenemos del lsitado
                int nCodigo = int.Parse(((string)collection["Codigo"] == string.Empty ? "0" : (string)collection["Codigo"]));
                string nombre = (string)collection["Nombres"];
                string apellidos = (string)collection["Apellidos"];
                //string correo = (string)collection["Correo"];
                // int ocupacion = int.Parse(collection["Ocupacion.Codigo"]);
                string pass = (string)collection["Pass"];
                string rpass = (string)collection["Rpass"];
                string telefono = (string)collection["Telefono"];
                string direccion = (string)collection["Direccion"];
                string dni = (string)collection["Dni"];
                string fecha_nac = (string)collection["Fecha_nac"];

                //fecha_nac=SubStringLeft(fecha_nac, 10);
                fecha_nac = fecha_nac.Substring(0, 10);

                proxyCliente.ModificarCliente(correo, apellidos, nombre, nCodigo, pass, rpass, telefono, direccion, dni, fecha_nac);
                return RedirectToAction("ListaClientes");
            }
            catch
            {
                return View();
            }
        }

        // GET: /cliente/Details/5
        public ActionResult DetallesCliente(string correo)
        {
            return View(proxyCliente.ObtenerCliente(correo));
        }




        public ActionResult EliminarCliente(string correo)
        {
            return View(proxyCliente.ObtenerCliente(correo));
        }

        //
        // POST: /Sede/Delete/5
        [HttpPost]
        public ActionResult EliminarCliente(string correo, FormCollection collection)
        {
            try
            {
                proxyCliente.EliminarCliente(correo);
                return RedirectToAction("ListaClientes");
            }
            catch
            {
                return View();
            }
        }
        public ActionResult RegistrarReserva(int IdCartelera)
        {
            if (String.IsNullOrEmpty(User.Identity.Name))
            {
                return RedirectToAction("LogOn", "Account");
            }




            Reserva reserva = null;
            reserva = new Reserva()
            {
 
                Idcartelera = IdCartelera,
                Correo = User.Identity.Name
            };

            return View(reserva);

        }
        [HttpPost]
        public ActionResult RegistrarReserva(int IdCartelera,FormCollection collection)
        {
            try
            {

                if (collection["Correo"].Trim().Length == 0) ModelState.AddModelError("Correo", "Debe Ingresar Correo");
                if (!ModelState.IsValid)
                {

                    Reserva reserva = null;
                    reserva = new Reserva()
                    {

                        Idcartelera = int.Parse(((string)collection["Idcartelera"])),
                        Idreserva = int.Parse(((string)collection["Idreserva"])),
                        Correo = User.Identity.Name
                    };

                    return View(reserva);

                }




                int         nreserva = int.Parse(((string)collection["Idreserva"]));
                string     correo = (string)collection["Correo"];
                int        ncartelera = int.Parse(((string)collection["Idcartelera"]));
                int        ncantn = int.Parse(((string)collection["Cantn"]));
                int        ncanta = int.Parse(((string)collection["Canta"]));



                const string quote = "\"";
                string postdata = "{"
                                + quote + "Idreserva" + quote + ":" + quote + nreserva + quote + ","
                                + quote + "Correo" + quote + ":" + quote + correo + quote + ","
                                + quote + "Idcartelera" + quote + ":" + quote + ncartelera + quote + ","
                                + quote + "Cantn" + quote + ":" + quote + ncantn + quote + ","
                                + quote + "Canta" + quote + ":" + quote + ncanta + quote +
                                  "}";

                // CREAR REGISTRO 
                byte[] data = Encoding.UTF8.GetBytes(postdata);
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(RestReserva);
                req.Method = "POST";
                req.ContentLength = data.Length;
                req.ContentType = "application/json";
                var reqStream = req.GetRequestStream();
                reqStream.Write(data, 0, data.Length);
                var res = (HttpWebResponse)req.GetResponse();
                return RedirectToAction("Index", "Cineplancito");

            }
            catch
            {
                return View();
            }
        }

    }
}
